package org.atoral.oralarithmetic.config;

//import com.alibaba.druid.FastsqlException;
import org.atoral.oralarithmetic.bean.Pig;
import org.atoral.oralarithmetic.bean.Sheep;
import org.atoral.oralarithmetic.bean.User;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Scope;

//@Import(FastsqlException.class) // 给容器中官方指定类型组件，组件名字默认是全类名
//@Configuration // 配置类注解,替代以前的配置文件,本身也是容器中的组件
@EnableConfigurationProperties(Sheep.class) // 1、开启组件属性绑定；2、默认会把这个组件放到容器中(跟谁绑定还是要用@ConfigurationProperties)
@SpringBootConfiguration // SpringBoot配置类,没啥区别

public class AppConfig {
    // 组件默认是单实例的
    @Scope("prototype") // 默认多实例,这样用之后改为多实例
    @Bean("userHaHa") // 替代以前的Bean标签，默认为组件在容器中的名字是方法名
    public User user01(){
        var user = new User();
        user.setId(1L);
        user.setName("张三");
        return user;
    }
    /*
    第三方类导入bean
    @Bean
    public FastsqlException fastsqlException(){
        return new FastsqlException();
    }
    */
    @ConfigurationProperties(prefix = "pig") // 也可以直接在这里使用s
    @Bean // 这样做会自动绑定,不需要注册组件
    public Pig pig(){
        return new Pig();
    }
}
